#ifndef __MYVECTOR_H_
#define __MYVECTOR_H_

#define ElementType void*
#define DEAULT_CAPACITY 4

//回调函数
//typedef void(*PrintCallBack)(DMArray* arr);
//typedef int(*FCallBack)(void *, void *);

typedef struct DynamicArrayPrivate
{
  ElementType *dp;//存放数据的地址
  int size;//当前数据个数
  int capacity;//数组能容纳的最大元素个数
}DMArray;

class DynamicArray
{
private:
    DMArray* arr;

public:
    //初始化,
    DynamicArray();
    //销毁
    void DMArray_Destroy();
    //打印
    void DMArray_Travel(void(*PrintCallBack)(ElementType));
    //尾插: num为插入数据的个数
    void DMArray_PushBack(ElementType element);
    //头插
    void DMArray_PushFront(ElementType element);
    //动态数组在index处插入数据element
    void DMArray_InsertByIndex(int index, ElementType element);
    //根据位置删除
    void DMArray_RemoveByIndex(int index);
    //根据值删除
    void DMArray_RemoveByElement(ElementType element, int (*compare)(void* s1, void* s2));
    //根据下标返回值
    ElementType DMArray_FindByIndex(int index);
    //查找值返回下标
    int* DMArray_FindByElement(ElementType element, int (*compare)(void* s1, void* s2));
    //清空数组
    void DMArray_Clear();
    //获取动态数组容量
    int DMArray_GetCapacity();
    //获取动态数组当前元素个数
    int DMArray_GetSize();
    //判断是否为空
    int DMArray_IsEmpty();

    //打印函数的具体实现
    void DMArray_Print_int(ElementType data);
};

// int ArrayInit(DMArray *array);
// void FreeArray(DMArray *array);
// int InsertArray(DMArray*array,ElementType element);
#endif
